package cn.wolfcode.web.util;

import cn.wolfcode.web.jsonResult.JsonResult;
import com.alibaba.fastjson.JSON;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.method.HandlerMethod;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@ControllerAdvice//对下面的每个控制器类进行增强处理
public class CRMExceptionHandler {//处理控制器异常处理类(代理类)
    //捕获运行过程中出现的运行时异常
    @ExceptionHandler(RuntimeException.class)
    public String handlerException(RuntimeException ex, HandlerMethod handlerMetfod, HttpServletResponse response)
            throws ServletException, IOException {
        ex.printStackTrace();////把异常信息打印出,方便我们开发的时候找bug
//        如果当前执行的方法是有贴@ResponseBody注解的,也是ajax的方法的
        if(handlerMetfod.hasMethodAnnotation(ResponseBody.class)){
//            如果是,则返回jsonresult
            JsonResult jsonResult = new JsonResult(false, "操作失败,请联系系统管理员");
//            为防止乱码和不同浏览器兼容问题,要设置下部门和浏览器跟服务器的数据访问格式
            response.setContentType("application/json;charset=utf-8");
            //使用response对象输出数据(json字符串)    jsonresult对象转成json字符串返回到ajax请求
          response.getWriter().print(JSON.toJSONString(jsonResult));
//            JSON.toJSONString(jsonResult);//使用阿里的依赖完成java对象转json字符串
            return null;
        }
        //如果不是,则返回错误视图
        return "common/error"; //返回的错误视图
    }

}
